package com.szrt.javaweb.ch01.dyn;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.szrt.javaweb.ch01.dyn.aop.TransactionAspect;



/**
 * 
 * 
 * ProxyFactory 只有1个目的： 生成目标对象的代理对象
 * 
 * 静态工厂
 * 
 * 王凯  杨幂的代理人的事情 
 * 
 * 
 * 动态代理： jdk提要求：请你实现一个借口   InvocationHandler  
 * 
 * 动态代理的前提条件： 目标对象必须要实现一个接口
 * 
 * 如果没有实现接口  cglib  子类  没有没有final才有子类
 * 
 * 
 * 
 * TYProxy  代理人 经纪人  代理对象
 * @author zsrt
 *
 */
public class ProxyFactory {
	

	public static  Object generateProxyObject(final Object yttx,final TransactionAspect aspect){
		
		ClassLoader loader = ProxyFactory.class.getClassLoader();
		
		//接口s
		Class<?>[] interfaces = yttx.getClass().getInterfaces();
		InvocationHandler h = new InvocationHandler() {
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				aspect.beginTransaction();
				//演戏不是直接演   用反射演
				
				
				Object object =method.invoke(yttx, args);
				
				aspect.commit();
				return object;
			}
		};
		
		Object object = Proxy.newProxyInstance(loader, interfaces, h);
		
		
		//object 代理对象
		return object;
		
	}

}
